import {
	isLogin,
	refreshlogin
} from './user'
import {
	AppInfo
} from './AppInfo'
import {
	Api
} from '../service/api'

// 支付类，负责处理支付逻辑
export class Pay {
	static appInfo = {} // 应用信息
	static playConfig = {} // 支付配置
	static params = null
	platform = 'wx'

	/**
	 * 构造函数，初始化支付类
	 * @param {string} platform 支付平台标识
	 */
	constructor(params) {
		this.params = params
		console.log(params, 'params');
		this.appInfo = AppInfo.getInstance().getAppInfo()
		// 如果用户未登录，则不执行后续操作
		if (!isLogin()) return
		this.load()
	}

	// 初始化支付流程
	setPay() {
		// 根据平台执行相应的支付操作
		if (this.platform === 'wx') {
			this.wxPay()
		}
	}

	/**
	 * 微信支付
	 * @return {Promise<void>}
	 */
	async wxPay() {
		// 根据操作系统选择不同的支付方式
		if (this.appInfo.osName === 1) {
			this.params.subject = uni.getStorageSync('appConfig').subject
			const {
				data
			} = await Api.dyGetPaySign(this.params)
			this.playConfig = data
			// console.log(this.playConfig, 'this.playConfig ');
			await this.dyVirtualPayment()
		} else {
			// const {
			// 	data
			// } = await Api.getPayConfig(this.params)
			const {
				data
			} = await Api.dyGetPaySign(this.params)
			this.playConfig = data
			await this.dyVirtualPayment()
		}
	}

	/**
	 * IOS系统下的支付
	 * @return {Promise<void>}
	 */
	iosPay() {
		// 使用uni.requestPayment进行支付
		uni.requestPayment({
			provider: 'wxpay',
			...JSON.parse(this.playConfig.payInfo),
			success: async (res) => {
				// 支付成功回调处理
				await this.paySuccess(res)
			},
			fail: (err) => {
				// 支付失败回调处理
				// this.payFail(err)
			},
			complete: (data) => {
				// 支付完成回调处理，无论成功失败都会执行
				this.payNotify(data)
			}
		})
	}

	/**
	 * 加载支付配置并初始化支付
	 * @return {Promise<void>}
	 */
	async load() {
		// 设置支付
		this.setPay()
	}

	/**
	 * 支付成功后的处理
	 * @param {Object} params 支付成功后的参数
	 */
	async paySuccess(params) {
		// 处理支付成功逻辑
		await Api.PayCallBack({
			outTradeNo: this.params.outTradeNo
		})
		console.log('支付成功', params)
		// 更新用户信息
		setTimeout(async () => {
			await refreshlogin()
			uni.$emit('update', {
				msg: '页面更新'
			})
		}, 500)
		uni.showToast({
			title: '支付成功',
			icon: 'success',
		})
	}
	/**
	 * 支付失败后的处理
	 */
	payFail() {
		// 处理支付失败逻辑
		console.log('支付失败')
	}

	/**
	 * 支付通知，无论成功失败都会执行
	 * @param {Object} params 支付通知参数
	 */
	payNotify(params) {
		// 处理支付通知逻辑
		console.log('支付通知：', params)
		if (params.errCode === -2) {
			uni.showToast({
				title: '支付已取消',
				icon: 'none',
			})
		}
		uni.hideLoading()
	}

	/**
	 * 虚拟支付处理
	 */
	virtualPayment() {
		// 使用wx.requestVirtualPayment进行虚拟支付
		wx.requestVirtualPayment({
			mode: this.playConfig.mode,
			signData: this.playConfig.signData,
			signature: this.playConfig.signature,
			paySig: this.playConfig.paySig,
			success: async (res) => {
				// 支付成功回调处理
				// await this.paySuccess(res)
				setTimeout(async () => {
					await refreshlogin()
					uni.$emit('update', {
						msg: '页面更新'
					})
				}, 500)
				uni.showToast({
					title: '支付成功',
					icon: 'success',
				})
			},
			fail: (err) => {
				// 支付失败回调处理
				// this.payFail(err)
			},
			complete: (data) => {
				// 支付完成回调处理，无论成功失败都会执行
				uni.showLoading({
					title: '订单查询中'
				})
				this.payNotify(data)
			}
		})
	}

	// 抖音虚拟支付
	async dyVirtualPayment() {
		console.log(tt.canIUse('requestOrder'));
		//拉起收银台
		uni.showLoading({
			title: '加载中'
		})
		console.log(uni.getStorageSync('appInfo').osName, 'uni.setStorageSyne');
		await tt.requestOrder({
			header: {
				"Content-Type": "application/json",
			},
			data: this.playConfig.datam,
			byteAuthorization: this.playConfig.byteAuthorization,
			success: (res) => {
				console.log("res", res);
				console.log('拉起收银台成功', res.orderId, tt.canIUse('getOrderPayment'));
				uni.hideLoading()
				// ios充值
				if (uni.getStorageSync('appInfo').osName == 1) {

					//拉起收银台
					tt.getOrderPayment({
						orderId: res.orderId,
						// imId: "Nice_ZHU",
						success: (res) => {
							console.log('支付成功', res);
							uni.showToast({
								title: "充值成功",
								icon: "success"
							})
							setTimeout(async () => {
								await refreshlogin()
								uni.$emit('update', {
									msg: '页面更新'
								})
							}, 500)
							//查询订单信息
						},
						fail: (res) => {
							console.log("支付失败", res)
						},

					});

				} else {
					// 安卓
					//拉起收银台
					console.log('安卓');
					tt.getOrderPayment({
						orderId: res.orderId,
						success: (res) => {
							console.log('支付成功', res);
							uni.showToast({
								title: "充值成功",
								icon: "success"
							})
							setTimeout(async () => {
								//查询订单信息
								await refreshlogin()
								uni.$emit('update', {
									msg: '页面更新'
								})
							}, 500)
						},
						fail: (res) => {
							console.log("支付失败", res)
						},
					});
				}
			},
			fail: (res) => {
				console.log("请求出错", res)
			},
		});
	}
}